import { app, BrowserWindow, ipcMain } from 'electron'
import path from "path"

const createWindow = () => {
    const mainWin = new BrowserWindow({
        show:false,
        width: 1000,
        height: 700,
        webPreferences: {
            preload: path.join(app.getAppPath(), 'electron/preload/main.ts'),
            nodeIntegration: true,
            contextIsolation: false
            //允许html页面上的javascipt代码访问nodejs 环境api代码的能力（与node集成的意思）
        }
    })

    // 打完包之后不应该走服务，应该走静态文件加载
    if (process.env.NODE_ENV !== 'development') {  // app.isPackaged 有bug 提示为flase
        mainWin.loadFile(path.join(__dirname, "../index.html"))
    } else {
        // VITE_DEV_SERVER_HOST 如果是undefined 换成  VITE_DEV_SERVER_HOSTNAME
        mainWin.loadURL(`http://${process.env['VITE_DEV_SERVER_HOSTNAME']}:${process.env['VITE_DEV_SERVER_PORT']}`)
    }
    mainWin.on("ready-to-show", () => {
        mainWin.show()
    })
    // 打开调试工具
    mainWin.webContents.openDevTools()
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
    createWindow()

    app.on('activate', () => {
        // 在 macOS 系统内, 如果没有已开启的应用窗口
        // 点击托盘图标时通常会重新创建一个新窗口
        if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
})

// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件，然后用 require 导入。